package bean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;

import model.MateriaPrima;
import model.Produto;
import model.Unidade;
import dao.DaoMateriaPrima;
import dao.DaoProduto;
import dao.DaoUnidade;

@ManagedBean
@SessionScoped
public class ProdutoBean {

	private Produto produto;
	private DataModel<Produto> produtos;
	private DaoProduto dao = new DaoProduto();
	
	//selects
	private int unidadeSelecionada;
	private List<SelectItem> listaUnidades;
	private int insumoSelecionado;
	private List<SelectItem> listaInsumos;
	private double quantidade;
	
	public Produto getProduto() {return produto;}
	public void setProduto(Produto u) {produto = u;}
	public int getUnidadeSelecionada() {return unidadeSelecionada; }
	public void setUnidadeSelecionada(int u) {unidadeSelecionada=u;}
	public int getInsumoSelecionado() {return insumoSelecionado; }
	public void setInsumoSelecionado(int i) {insumoSelecionado=i;}
	public double getQuantidade() {return quantidade;}
	public void setQuantidade(double q) {quantidade=q;}
	public void setListaUnidades(List<SelectItem> lista) {listaUnidades = lista;}
	public void setListaInsumos(List<SelectItem> lista) {listaInsumos = lista;}
	
	public List<SelectItem> getListaUnidades() {
		listaUnidades = getLista();
		return listaUnidades;
	}
	public List<SelectItem> getListaInsumos() {
		listaInsumos = getListaMateriaPrima();
		return listaInsumos;
	}
	
	
	public List<SelectItem> getLista() {
	        ArrayList<SelectItem> lista = new ArrayList<SelectItem>();
	        DaoUnidade unidadeDao = new DaoUnidade();
	        List<Unidade> resultado = unidadeDao.findAll();
	 
	        for (Unidade teste : resultado) {
	            SelectItem item = new SelectItem(teste.getId(), teste.getNome());
	            lista.add(item);
	        }
	        return lista;
	}	

	public List<SelectItem> getListaMateriaPrima() {
		ArrayList<SelectItem> lista = new ArrayList<SelectItem>();
		DaoMateriaPrima dao = new DaoMateriaPrima();
		List<MateriaPrima> resultado = dao.findAll();
		
		for (MateriaPrima teste : resultado) {
			SelectItem item = new SelectItem(teste.getId(), teste.getDescricao());
			lista.add(item);
		}
		return lista;
	}	

	
	public DataModel<Produto> getProdutos() {
		List<Produto> lista = dao.findAll();
		produtos = new ListDataModel<Produto>(lista);
		return produtos;
	}
	
	public void salvar() {
		Unidade u = new DaoUnidade().find(getUnidadeSelecionada());
		produto.setUnidade(u);
		FacesContext fc = FacesContext.getCurrentInstance();
		dao.persist(produto);
		fc.addMessage(null, new FacesMessage("Cadastro efetuado com sucesso", produto.getDescricao())); 
	}
	
	public void load(ActionEvent e){
		produto = (Produto)(produtos.getRowData());
		if (produto.getUnidade() != null)
			setUnidadeSelecionada(produto.getUnidade().getId());
	}
	
	public void create(ActionEvent e) {
		produto = new Produto();
	}
	public void update(ActionEvent e) {
		Unidade u = new DaoUnidade().find(getUnidadeSelecionada());
		produto.setUnidade(u);		
		FacesContext fc = FacesContext.getCurrentInstance();
		dao.merge(produto);
		fc.addMessage(null, new FacesMessage("Cadastro alterado com sucesso", produto.getDescricao())); 
	}
	
	public void adicionarInsumo(ActionEvent e) {
		System.out.println("adicionando o insumo");
		DaoMateriaPrima dao = new DaoMateriaPrima();
		MateriaPrima materia = dao.find(getInsumoSelecionado());
		if (materia != null) {
			getProduto().addInsumo(materia, getQuantidade());
		}
		System.out.println("adicionado.");
	}
	
}
